package com.yunyao.framework.service;

import com.yunyao.common.dto.payment.PaymentDto;
import com.yunyao.common.web.util.PageResult;
import com.yunyao.common.web.util.YResult;
import com.yunyao.framework.dto.audit.ApprovalDto;
import com.yunyao.framework.dto.audit.SubmitApprovalDto;
import com.yunyao.framework.dto.payment.PaymentNodeSaveDto;
import com.yunyao.framework.dto.payment.PaymentSaveDto;
import com.yunyao.framework.vo.payment.PaymentContractInvoiceVO;
import com.yunyao.framework.vo.payment.PaymentHistoryVO;
import com.yunyao.framework.vo.payment.PaymentNodeVO;
import com.yunyao.framework.vo.payment.PaymentVO;

import java.util.List;

/**
 * 付款管理service
 *
 * @author chenyejian
 * @Date 2024/7/31 11:22
 */
public interface PaymentService {
    /**
     * 根据条件分页查询列表
     * @param   paymentDto
     * @return
     */
    YResult<PageResult<PaymentVO>> pageList(PaymentDto paymentDto);

    /**
     * 根据id查询详情
     *
     * @param id
     * @return
     */
    YResult<PaymentVO> getDetailById(String id);

    /**
     * @param id
     * @return
     */
    YResult<String> deleteById(String id);

    /**
     * 根据合同id获取历史付款记录
     */
    YResult<List<PaymentHistoryVO>> getHistoryList(PaymentDto paymentDto);


    /**
     * 根据合同id获取历史付款记录
     */
    YResult<List<PaymentContractInvoiceVO>> getInvoiceList(PaymentDto paymentDto);


    /**
     * 根据合同id获取历史付款记录
     */
    YResult<List<PaymentContractInvoiceVO>> getReceiveInvoiceList(PaymentDto paymentDto);


    /**
     * 获取付款节点
     *
     * @param paymentDto
     * @return
     */
    YResult<List<PaymentNodeVO>> getPaymentNodeList(PaymentDto paymentDto);


    /**
     * 保存或更新
     *
     * @param dto
     * @return
     */
    YResult<String> saveOrUpdate(PaymentSaveDto dto);


    /**
     * 保存或更新节点
     */
    YResult<String> nodeSaveOrUpdate(PaymentNodeSaveDto dto);


    /**
     * 关联发票
     */
    YResult<String> invoiceConnect(PaymentDto paymentDto);

    /**
     * 提交审批
     *
     * @param approvalDto
     * @return
     */
    YResult<String> submitApproval(SubmitApprovalDto approvalDto);

    /**
     * 审批
     * @param approvalDto
     * @return
     */
    YResult<String> approval(ApprovalDto approvalDto);

    /**
     * 审批撤销
     * @param approvalDto
     * @return
     */
    YResult<String> revocation(ApprovalDto approvalDto);



}
